package query

import (
	"context"
	base "{{.Namespace}}/pkg/cmd-service/infrastructure/base/application/service"
	query_dto "{{.Namespace}}/pkg/query-service/userinterface/rest/{{.aggregate_name}}/dto"
	"sync"
)

type {{.Name}}QueryService struct {
	base.BaseAppQueryService
}

var _once{{.Name}} sync.Once
var _{{.name}}QueryService *{{.Name}}QueryService

//
// new{{.Name}}QueryService
// @Description: 创建{{.Name}}QueryService
// @return *{{.Name}}QueryService
//
func new{{.Name}}QueryService() *{{.Name}}QueryService {
	query := &{{.Name}}QueryService{}
    query.Init("{{.QueryServiceName}}", "{{.PluralName}}", "{{.ApiVersion}}")
	return query
}

//
// Get{{.Name}}QueryService
// @Description: 获取{{.Name}}QueryService
// @return *{{.Name}}QueryService
//
func Get{{.Name}}QueryService() *{{.Name}}QueryService {
	_once{{.Name}}.Do(func() {
		_{{.name}}QueryService = new{{.Name}}QueryService()
	})
	return _{{.name}}QueryService
}

//
// QueryById
// @Description: 按id获取{{.Description}}投影类
// @receiver s queryAppService
// @param ctx 上下文
// @param tenantId  租户id
// @param id {{.Description}} Id
// @return data {{.Description}} 信息
// @return isFound 是否找到
// @return err 错误信息
//
func (s *{{.Name}}QueryService) QueryById(ctx context.Context, tenantId string, id string) (*query_dto.{{.Name}}FindByIdResponse, bool, error) {
	var resp query_dto.{{.Name}}FindByIdResponse
	isFound, err := s.BaseAppQueryService.QueryById(ctx, tenantId, id, &resp)
	if err != nil {
		return nil, false, err
	}
	return &resp, isFound, nil
}

//
// QueryByIds
// @Description: 按ids获取{{.Description}}投影类
// @receiver s queryAppService
// @param ctx 上下文
// @param tenantId  租户id
// @param ids 多个{{.Description}}Id
// @return data {{.Description}} 信息
// @return isFound 是否找到
// @return err 错误信息
//
func (s *{{.Name}}QueryService) QueryByIds(ctx context.Context, tenantId string, ids []string) (*query_dto.{{.Name}}FindByIdsResponse, bool, error) {
	var resp query_dto.{{.Name}}FindByIdsResponse
	isFound, err := s.BaseAppQueryService.QueryByIds(ctx, tenantId, ids, &resp)
	if err != nil {
		return nil, false, err
	}
	return &resp, isFound, nil
}
